package com.jeff.interview;

import java.util.HashSet;

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 用于存储窗口中的字符
        HashSet<Character> charSet = new HashSet<>();
        int left = 0; // 滑动窗口的左边界
        int maxLength = 0; // 存储最长子串的长度

        for (int right = 0; right < s.length(); right++) {
            // 如果字符重复，则移动左指针直到没有重复
            while (charSet.contains(s.charAt(right))) {
                charSet.remove(s.charAt(left)); // 移除左边界的字符
                left++; // 收缩左边界
            }
            // 添加当前字符到窗口中
            charSet.add(s.charAt(right));
            // 更新最长子串的长度
            maxLength = Math.max(maxLength, right - left + 1);
        }
        
        return maxLength;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        // 示例1
        System.out.println(solution.lengthOfLongestSubstring("abcabcbb")); // 输出: 3
        // 示例2
        System.out.println(solution.lengthOfLongestSubstring("bbbbb"));    // 输出: 1
        // 示例3
        System.out.println(solution.lengthOfLongestSubstring("pwwkew"));  // 输出: 3
    }
}